// 测试 Array 原型上用于搜索元素的方法

const names = [ '敖广' , '敖钦' , '熬闰' , '敖钦' , '敖顺' , '熬闰' ];

let key = '孙悟空' ;
console.log( names.indexOf( key ) , names.lastIndexOf( key ) );
console.log( names.includes( key ) ); // false

key = '敖顺' ;
console.log( names.indexOf( key ) , names.lastIndexOf( key ) );
console.log( names.includes( key ) ); // true

key = '熬闰' ;
console.log( names.indexOf( key ) , names.lastIndexOf( key ) );
console.log( names.includes( key ) ); // true

key = '敖钦' ;
// Array.prototype.indexOf( searchElement [ , fromIndex ] )
console.log( names.indexOf( key , 2 ) ); // 查找次序是 2、3、4、....
// Array.prototype.lastIndexOf( searchElement [ , fromIndex ] )
console.log( names.lastIndexOf( key , 2 ) ); // 查找次序是 2 、1 、0
// Array.prototype.includes( searchElement [ , fromIndex ] )
console.log( names.includes( key , 2 ) ); // 查找次序是 2、3、4、....

console.log( '- '.repeat( 20 ) );

const personNames = [ '孙悟空' ,  '敖广' , '孙中山' , '敖闰' , '诸葛亮' , '敖钦' , '王莽' , '敖顺' ];

let check = (element,index,array)=>{
    return element.startsWith( '敖' ) ;
}

// Array.prototype.findIndex( check ) 
// 返回数组中满足提供的测试函数的第一个元素的索引
// 若没有找到对应元素则返回-1
let index = personNames.findIndex( check );
console.log( index , personNames[ index ] );

// Array.prototype.find( check ) 
// 返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。
let element = personNames.find( check );
console.log( element );

console.log( '- '.repeat(20) );

const courses = [
    { id: 1001 , name: 'How to protram Java' , credit: 3 },
    { id: 1012 , name: '网页设计' , credit: 2 },
    { id: 1022 , name: '数据结构' , credit: 3 },
    { id: 1041 , name: 'Java程序设计' , credit: 4 }
];

index = courses.findIndex( e => e.credit > 3 );
console.log( index , courses[ index ] );

element = courses.find( e => e.credit > 3 );
console.log( element );

// 总结:
// Array.prototype.indexOf( searchElement [ , fromIndex ] )
// Array.prototype.lastIndexOf( searchElement [ , fromIndex ] )
// Array.prototype.includes( searchElement [ , fromIndex ] )
// Array.prototype.findIndex( (element,index,array)=> { } [ , thisArg ] )
// Array.prototype.find( (element,index,array)=> { } [ , thisArg ] )